<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="../lib/jquery-3.4.1.js"></script>
    <script src="lib/base.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0
        }

        img {
            width: 240px;
        }

        .item {
            border: 2px solid pink;
            padding: 20px;
            float: left;
        }
    </style>
</head>

<body>
    <div class="content">
        <div class="item">
            <img src="images/01.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/02.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/03.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/04.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/05.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/06.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/07.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/08.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/09.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/10.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/11.jpg" alt="">
        </div>
        <div class="item">
            <img src="images/12.jpg" alt="">
        </div>
    </div>
    <script>
        //假设是从服务器上取得的数据
        var url = {
            dataUrl: [{
                src: "01.jpg"
            }, {
                src: "02.jpg"
            }, {
                src: "03.jpg"
            }, {
                src: "04.jpg"
            }, {
                src: "05.jpg"
            }, {
                src: "06.jpg"
            }, {
                src: "07.jpg"
            }, {
                src: "08.jpg"
            }, {
                src: "09.jpg"
            }, {
                src: "10.jpg"
            }, {
                src: "11.jpg"
            }, {
                src: "12.jpg"
            }]
        }


        window.onload = function () {
            place_img();    
            $(window).scroll(function () {
                if (onReachBottom()) {
                    url.dataUrl.forEach(item => {
                        let list = `<div class="item"><img src="images/${item.src}"/></div>`
                        $(".content").append(list);
                        place_img();
                    })
                }
            })
        }
        // 1.看一排能放置几张图片  num
        function place_img() {
            var ww = $(window).width(); //屏幕宽度
            var itemWidth = $(".item").outerWidth(); //单个图片item的宽度
            var num = Math.floor(ww / itemWidth); //屏幕一排可以放置几张图片
            // 2.将第一排的高度添加到一个数组中
            var heightArr = [];
            $(".item").each((index, item) => { //对所有的item进行遍历
                if (index < num) { //当item 的数量小于一排可以放置的数量 也就是给第一排的图片的高度 建立一个数组
                    console.log($(item).outerHeight()); //输出各个item的高度
                    var item = $(item).outerHeight(); //将各个item的高度取到
                    heightArr.push(item); //将高度建立一个数组
                } else { //超出一排能容纳的图片的处理
                    // 3.从数组高度最小的地方添加图片
                    var minHeight = Math.min(...heightArr); //先找出第一排中最小高度的图片的高度
                    var minIndex = heightArr.indexOf(minHeight); //找到这个图片在数组中的下标
                    var offsetLeft = $(".item").eq(minIndex).offset().left; //找到第一排高度最小的图片距离左边的距离
                    $(".item").eq(index).css({
                        position: 'absolute',
                        top: minHeight,
                        left: offsetLeft
                    }); //给新加的图片进行定位
                    // 重置数组的最小高度
                    var height = $(".item").eq(index).outerHeight(); //取得当前插入的图片的高度
                    heightArr[minIndex] = minHeight + height //对高度数组进行重置，将最新的高度给数组。
                }
            })
        }
    </script>
</body>

</html>